//
// Created by LiuYou on 2021/11/30.
//

#include <iostream>
#include <vector>


static int process(std::vector<int>& arr, int l, int r) {
    // arr[L...R]范围上只有一个数, 直接返回, base case(基线情况)。
    // 只有一个数, 那么最大值就是它自己。
    if (l == r) {
        return arr[l];
    } else {
        int mid = l + ((r - l) >> 1);
        int leftMax = process( arr, l, mid );
        int rightMax = process( arr, mid + 1, r );
        return std::max( leftMax, rightMax );
    }
}


static int getMax(std::vector<int>& arr) {
    return process( arr, 0, arr.size() - 1 );
}


static int getMax2(std::vector<int>& arr) {
    int maxIndex = 0;
    for (int i = 0; i < arr.size() - 1; ++i) {
        if (arr[i] > arr[maxIndex]) {
            maxIndex = i;
        }
    }
    return arr[maxIndex];
}


int main(int argc, char** argv) {
    {
        std::vector<int> arr{3, 5, 11, 1, 3, 444444444, 5651000, 232, 31, 3, 51341};

        std::cout << getMax( arr ) << std::endl;
        std::cout << getMax2( arr ) << std::endl;
    }


    return 0;
}




